package 设计模式.代理模式.动态代理模式;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
//自动生成代理类
//InvocationHandler：调用代理程序
//Proxy：生成代理类
public class ProxyInvocationHandler implements InvocationHandler {
    //传入被代理的接口
    private Object object;

    public void setObject(Object object) {
        this.object = object;
    }
    //生成得到代理类
    public Object getProxy(){
        return Proxy.newProxyInstance(this.getClass().getClassLoader(),object.getClass().getInterfaces(),this);
    }

    //处理代理示例并返回结果
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        log(method.getName());
        Object result = method.invoke(object,args);
        return result;
    }

    public void log(String msg){
        System.out.println("这是一个："+msg+"方法!");
    }

}
